<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>25.继承是原型的继承</title>
</head>

<body>
</body>
<script>
  // 正确的继承原型的方法
  function User () { }
  User.prototype.name = function () {
    console.log('user.name');
  }
  function Admin () { }
  Admin.prototype.role = function () {
    console.log('admin role');
  };
  //原型的__proto__指向 User.prototype ，prototype.role 赋值 function可以房子__proto___属性之前，因为function本身就是有 prototype属性的
  Admin.prototype.__proto__ = User.prototype;;


  function Member () { }
  //Object.create(User.prototype); 方法会创建一个以User.prototype为原型的新对象，因此 Member.prototype.role赋值语句 要放在Member.prototype = Object.create(User.prototype);后面，否则会找不到role方法（因为原来的原型对象被覆盖了）

  Member.prototype = Object.create(User.prototype);
  Member.prototype.role = function () {
    console.log('member role');
  };
  let a = new Admin(); //admin role
  let m = new Member();//member role

  a.name();
  a.role();
  m.role();

</script>

</html>